import re
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse, redirect, reverse

from app01 import models
from istudy import settings


class AuthMiddleWare(MiddlewareMixin):

    def process_request(self, request):
        # 需要登录后访问的地址 需要判断登录状态
        # 默认所有的地址都要登录才能访问
        # 设置一个白名单  不登录就能访问
        url = request.path_info
        print(url)

        # 校验登录状态
        is_login = request.session.get("is_login")
        if is_login:
            # 已经登录了 可以访问
            obj = models.User.objects.filter(pk=request.session["pk"]).first()  # 获取的是user表中全部的对象
            print("obj---->", obj)
            # print(obj.avatar)  # img/avatar/1.jpg拿的图片对象的地址
            # print(obj.avatar.url)  # /media/img/avatar/1.jpg url地址
            request.user_obj = obj  # 千万不要命名为request.user,因为内置有
            return

            # 白名单
        for i in settings.WHITE_LIST:
            if re.match(i, url):
                return

        # 没有登录 需要去登录
        return redirect("{}?url={}l".format(reverse("login"), url))
